package com.cqupt.scanning.system.file.helper;

import com.alibaba.fastjson.JSON;
import com.cqupt.scanning.system.file.entity.bo.MesurementBO;
import com.csvreader.CsvReader;
import org.apache.commons.io.IOUtils;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
 * 解析特定文件格式类
 * @Data: 2021/7/7 10:26
 * @Author: 宋宝梁
 */
public class ReadUploadedFile {

    /**
     * 解析足底json文件
     * @param file
     * @param t
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T analysisJsonFile(File file, T t, Class<T> clazz) {
        InputStream is = null;
        String jsonText;
        try {
            is = new FileInputStream(file);
            if (file.getName().contains("userinfo")) {
                String content = IOUtils.toString(is, StandardCharsets.UTF_8);
                int index = content.indexOf('}');
                jsonText = content.substring(0, index + 1);
                t = JSON.parseObject(jsonText, clazz);
                return t;
            }
            jsonText = IOUtils.toString(is, StandardCharsets.UTF_8);
            t = JSON.parseObject(jsonText, clazz);
            return t;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is!=null) is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return t;
    }

    /**
     * 解析足底csv文件
     * @param file
     * @param list
     */
    public static void analysisCsvFile(File file, List<String[]> list) {
        Reader reader = null;
        CsvReader csvReader = null;
        try {
            reader = new FileReader(file);
            csvReader = new CsvReader(reader);
            csvReader.readHeaders();
            while (csvReader.readRecord()) {
                list.add(csvReader.getValues());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (csvReader!=null) csvReader.close();
                if (reader!=null) reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 解析三维csv文件
     * @param mesurementPath
     * @return
     */
    public static MesurementBO analysisCsvFile(String mesurementPath) {

        MesurementBO mesurementBO = new MesurementBO();
        CsvReader reader = null;
        try {
            ArrayList<String[]> csvFileList = new ArrayList<>();
            reader = new CsvReader(mesurementPath, ',', StandardCharsets.UTF_16LE);
            while (reader.readRecord()) csvFileList.add(reader.getValues());
            for (int row = 0; row < csvFileList.size(); row++) {
                // 取得第row行第0列的数据
                String cell = csvFileList.get(row)[0];
                String[] s = cell.split("\t");
                if(row == 0) {
                    mesurementBO.setBaseInfo(s[0]);
                    continue;
                }
//                if(row == 55) mesurementBO.setFootL(s[1]).setFootR(s[2]);
//                if(row == 56) mesurementBO.setArchL(s[1]).setArchR(s[2]);
//                if(row == 57) mesurementBO.setOneHeelTipL(s[1]).setOneHeelTipR(s[2]);
//                if(row == 58) mesurementBO.setFiveHeelTipL(s[1]).setFiveHeelTipR(s[2]);
//                if(row == 59) mesurementBO.setHcHeelTipL(s[1]).setHcHeelTipR(s[2]);
//                if(row == 60) mesurementBO.setLatArchHeelTipL(s[1]).setLatArchHeelTipR(s[2]);
//                if(row == 61) mesurementBO.setMedArchHeelTipL(s[1]).setMedArchHeelTipR(s[2]);
//                if(row == 64) mesurementBO.setForeFootL(s[1]).setForeFootR(s[2]);
//                if(row == 65) mesurementBO.setHeelL(s[1]).setHeelR(s[2]);
//                if(row == 66) mesurementBO.setMidFootL(s[1]).setMidFootR(s[2]);
//                if(row == 67) mesurementBO.setOneToFiveMetL(s[1]).setOneToFiveMetR(s[2]);
//                if(row == 84) mesurementBO.setArchIndexL(s[1]).setArchIndexR(s[2]);
//                if(row == 88) mesurementBO.setHalluxAngleL(s[1]).setHalluxAngleR(s[2]);
//                if(row == 118) mesurementBO.setMedArchAreaL(s[1]).setMedArchAreaR(s[2]);
//                if(row == 119) mesurementBO.setMedArchVolumeL(s[1]).setMedArchVolumeR(s[2]);
//                if(row == 120) mesurementBO.setFootAreaL(s[1]).setFootAreaR(s[2]);
//                if(row == 121) mesurementBO.setArchHeightL(s[1]).setArchHeightR(s[2]);
                if(row == 27)  {
                    mesurementBO.setFootL(s[1]).setFootR(s[2]);
                    continue;
                }
                if(row == 28) {
                    mesurementBO.setArchL(s[1]).setArchR(s[2]);
                    continue;
                }
                if(row == 29) {
                    mesurementBO.setOneHeelTipL(s[1]).setOneHeelTipR(s[2]);
                    continue;
                }
                if(row == 30) {
                    mesurementBO.setFiveHeelTipL(s[1]).setFiveHeelTipR(s[2]);
                    continue;
                }
                if(row == 31) {
                    mesurementBO.setHcHeelTipL(s[1]).setHcHeelTipR(s[2]);
                    continue;
                }
                if(row == 32) {
                    mesurementBO.setLatArchHeelTipL(s[1]).setLatArchHeelTipR(s[2]);
                    continue;
                }
                if(row == 33) {
                    mesurementBO.setMedArchHeelTipL(s[1]).setMedArchHeelTipR(s[2]);
                    continue;
                }
                if(row == 35) {
                    mesurementBO.setForeFootL(s[1]).setForeFootR(s[2]);
                    continue;
                }
                if(row == 36) {
                    mesurementBO.setHeelL(s[1]).setHeelR(s[2]);
                    continue;
                }
                if(row == 37) {
                    mesurementBO.setMidFootL(s[1]).setMidFootR(s[2]);
                    continue;
                }
                if(row == 38) {
                    mesurementBO.setOneToFiveMetL(s[1]).setOneToFiveMetR(s[2]);
                    continue;
                }
                if(row == 50) {
                    mesurementBO.setArchIndexL(s[1]).setArchIndexR(s[2]);
                    continue;
                }
                if(row == 53) {
                    mesurementBO.setHalluxAngleL(s[1]).setHalluxAngleR(s[2]);
                    continue;
                }
                if(row == 75) {
                    mesurementBO.setMedArchAreaL(s[1]).setMedArchAreaR(s[2]);
                    continue;
                }
                if(row == 76) {
                    mesurementBO.setMedArchVolumeL(s[1]).setMedArchVolumeR(s[2]);
                    continue;
                }
                if(row == 77) {
                    mesurementBO.setFootAreaL(s[1]).setFootAreaR(s[2]);
                    continue;
                }
                if(row == 78) mesurementBO.setArchHeightL(s[1]).setArchHeightR(s[2]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(reader!=null) reader.close();
        }
        return mesurementBO;
    }
}
